
import Vue from 'vue';
// 引入element UI
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App';
// 引入路由
import router from './router';
// 引入状态管理
import store from './vuex/store';
// 引入icon
import './assets/icon/iconfont.css';
import axios from 'axios';
// 引入echarts
import echarts from 'echarts'
import jsutils from './utils/util';
// 


Vue.prototype.$echarts = echarts
Vue.prototype.$axios = axios;
Vue.prototype.$jsutils = jsutils;
Vue.config.productionTip = false;

// 使用element UI
Vue.use(ElementUI);






/**权限指令
 *用法 v-has 
 **/
Vue.directive('permission', {
    // bind：只调用一次，指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

    // inserted：被绑定元素插入父节点时调用 (仅保证父节点存在，但不一定已被插入文档中)。
    
    // update：所在组件的 VNode 更新时调用，但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变，也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
    
    // componentUpdated：指令所在组件的 VNode 及其子 VNode 全部更新后调用。
    
    // unbind：只调用一次，指令与元素解绑时调用。

    inserted(binding, url) {
        //binding 对象本身
        if (!Vue.prototype.$permission(url.value[0], url.value[1])) {
           binding.parentNode.removeChild(binding);
           
        }
    }
});
//权限检查方法
Vue.prototype.$permission = (Number, url) => {
    let userbtnlis = url.meta.btns.filter(x => { return x.Number == Number });
    let ispermission = userbtnlis.length > 0 ? true : false;
    return ispermission;
};



// 路由拦截器
router.beforeEach((to, from, next) => {
    if (to.matched.length != 0) {
        if (to.meta.requireAuth) { // 判断该路由是否需要登录权限
            if (jsutils.sessionget("token") != '') { // 通过vuex state获取当前的user是否存在
                next();
            } else {
                next({
                    path: '/login',
                    query: { redirect: to.fullPath } // 将跳转的路由path作为参数，登录成功后跳转到该路由
                })
            }
        } else {
            if (jsutils.sessionget("token") == '') { // 判断是否登录
                if (to.path != "/" && to.path != "/login") { //判断是否要跳到登录界面
                    next();
                } else {
                    /**
                     * 防刷新，如果登录，修改路由跳转到登录页面，修改路由为登录后的首页 
                     */
                    next({
                        path: '/WX/WXconfig'
                    });

                    // next({
                    //     path: '/WX/WXconfig'
                    // })
                }
            } else {
                next();
            }
        }
    } else {
        next({
            path: '/login',
            query: { redirect: to.fullPath } // 将跳转的路由path作为参数，登录成功后跳转到该路由
        })
    }
})

/* eslint-disable no-new */
new Vue({
    el: '#app',
    router,
    store, //使用store vuex状态管理
    components: { App },
    template: '<App/>',
    data: {
        // 空的实例放到根组件下，所有的子组件都能调用
        Bus: new Vue()
    }

})